const promisify = (func) => {
  return (...args) => {
    return new Promise((resolve, reject) => {
      func(args, (err, res) => {
        if (err) return reject(err);
        resolve(res);
      });
    });
  };
};


const test = (arg0, cb) => {
  setTimeout(() => {
    if (Math.random() > 0.5) {
      cb(new Error('失败'));
    } else { 
      cb(null, 'data');
    }
  }, 300);
}

const pf = promisify(test);

pf('a').then((res) => {
  console.log(res);
}).catch(err => console.log(err))